# 1.数据整合
setwd("C:\\Users\\lenovo\\Desktop\\R语言")
x=list.files("GSE67835")    #更改路径并读取GSE67835文件夹
setwd("C:\\Users\\lenovo\\Desktop\\R语言\\GSE67835")
y<-""
for(i in 2:139)
{
  y[i]=substr(x[i],1,10)    #将样本名截取并读入y数组
} 
y2<-substr(x[2],1,10)  
x2<-read.csv(x[2],sep="",row.names = 1,col.names =y[2] )
#以上两行获取第一个样本名，以及读取第一个样本文件夹
X=rownames(x2)    
x2=cbind(X,x2)    #提取行名作为第一列，以便后续合并
for(i in 1:137)    #进行两两表合并的循环，x2为一次循环合并前的表,
                   #z为每次循环需要合并的表
{
  z<-read.csv(x[i+2],sep="",row.names = 1,col.names=y[i+2])
  X=rownames(z)    
  z=cbind(X,z)     #提取行名作为第一列，以便后续合并
  x2<-merge(x2,z,by=intersect(names(x2),names(z)))
}
#----------
a=read.table(x[1],skip=36,nrows=11)   #读取介绍txt中的特定行
b1<-c("tissue",vector(length = 138))   
b2<-c("cell type",vector(length = 138))
b3<-c("age",vector(length = 138))
b4<-data.frame(b1,b2,b3)    #建立三个有行名称的空数据行
b4<-t(b4)       #因为行列相反，进行T逆置
colnames(b4)<-(y)
colnames(b4)[1]<-"X"     #将列标题改为一致，以便进行rbind合并
x2<-rbind(b4,x2)         #空数据行和数据进行合并
#----------
for(i in 2:139)         #两个循环查找到a中x2需要的数据并进行填写
  for(j in 2:139)
  {
    if(colnames(x2)[i]==a[1,j])   #确保样本名称一致时进行数据填写
    {
     x2[1,i]<-a[9,j]
     x2[2,i]<-a[10,j]
     x2[3,i]<-a[11,j]
    }
  }
setwd("C:\\Users\\lenovo\\Desktop\\R语言")
write.csv(x2,file="finaldata.csv",row.names = FALSE)   #保存为csv格式

#2.计算缺失值
setwd("C:\\Users\\lenovo\\Desktop\\R语言")   
mer1<-read.csv("merdata.csv")   #读取实践三数据
rownames(mer1)=mer1[,1]    
mer1=mer1[-1]         #将第一列作为行名，并删除第一列
default1<-apply(mer1,1,function(x){sum(x==0)})   #行计数
default2<-apply(mer1,2,function(x){sum(x==0)})   #列计数